﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using Proyecto7CAD.Properties;
using System.Data.SqlClient;
using System.Data;

namespace Proyecto7CAD
{
    public class LocalizacionCAD
    {
        //Inserta los datos de la localizacion en la tabla Localizacion
        public void insertarLocalizacion(string nombre, string descripcion, string imagen, string fondo)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from localizacion ", conex);

                da.Fill(bdvirtual, "localizacion");
                //Obtenemos la tabla localizacion
                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["localizacion"];
                //Creamos la nueva fila a insertar
                DataRow nuevafila = tabla.NewRow();
                //nuevafila[0] = localizacion.IdLocalizacion;
                nuevafila[1] = nombre;
                nuevafila[2] = descripcion;
                nuevafila[3] = imagen;
                nuevafila[4] = fondo;

                tabla.Rows.Add(nuevafila);

                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                da.Update(bdvirtual, "localizacion");
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Inserta un enemigo en la tabla EnemigoLocalizacion
        public void insertarEnemigoLocalizacion(int idLocalizacion, int idEnemigo, int porcentaje)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtualenemigo = new DataSet();
                SqlDataAdapter daenemigo = new SqlDataAdapter("select * from enemigolocalizacion", conex);

                daenemigo.Fill(bdvirtualenemigo, "enemigolocalizacion");
                DataTable tablaenemigo = new DataTable();
                tablaenemigo = bdvirtualenemigo.Tables["enemigolocalizacion"];

                DataRow nuevafilaenemigo = tablaenemigo.NewRow();
                nuevafilaenemigo[0] = idLocalizacion;
                nuevafilaenemigo[1] = idEnemigo;
                nuevafilaenemigo[2] = porcentaje;

                tablaenemigo.Rows.Add(nuevafilaenemigo);

                SqlCommandBuilder cbuilderenemigos = new SqlCommandBuilder(daenemigo);
                daenemigo.Update(bdvirtualenemigo, "enemigolocalizacion");
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }

        }

        //Inserta un objeto en la tabla ObjetoLocalizacion
        public void insertarObjetoLocalizacion(int idLocalizacion, int idObjeto, int porcentaje)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtualenemigo = new DataSet();
                SqlDataAdapter daenemigo = new SqlDataAdapter("select * from objetolocalizacion", conex);

                daenemigo.Fill(bdvirtualenemigo, "objetolocalizacion");
                DataTable tablaenemigo = new DataTable();
                tablaenemigo = bdvirtualenemigo.Tables["objetolocalizacion"];


                //en tablaindices de [0][0] tenemos el indice de mayor valor (el ultimo insertado) en localizacion
                DataRow nuevafilaenemigo = tablaenemigo.NewRow();
                nuevafilaenemigo[0] = idLocalizacion;
                nuevafilaenemigo[1] = idObjeto;
                nuevafilaenemigo[2] = porcentaje;

                tablaenemigo.Rows.Add(nuevafilaenemigo);

                SqlCommandBuilder cbuilderenemigos = new SqlCommandBuilder(daenemigo);
                daenemigo.Update(bdvirtualenemigo, "objetolocalizacion");
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Obtiene el ID de la ultima localizacion insertada
        public int obtenerUltimoIDLocalizacion()
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtualIndice = new DataSet();
                SqlDataAdapter daindicelocalizacion = new SqlDataAdapter("select * from localizacion order by idLocalizacion desc", conex);

                daindicelocalizacion.Fill(bdvirtualIndice, "localizacion");
                DataTable tablaindices = new DataTable();
                tablaindices = bdvirtualIndice.Tables["localizacion"];

                return int.Parse(tablaindices.Rows[0][0].ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Obtiene la localizacion con el id que se le pasa por argumento
        public DataTable obtenerLocalizacion(int id)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from localizacion where idLocalizacion=" + id.ToString(), conex);

                da.Fill(bdvirtual, "localizacion");

                return bdvirtual.Tables["localizacion"];
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Devuelve los enemigos asociados a una localizacion
        public DataTable obtenerEnemigoLocalizacion(int id)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from enemigolocalizacion where idLocalizacion="+id.ToString(), conex);

                da.Fill(bdvirtual, "enemigolocalizacion");

                return bdvirtual.Tables["enemigolocalizacion"];
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Devuelve los objetos asociados a una localizacion
        public DataTable obtenerObjetoLocalizacion(int id)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from objetolocalizacion where idLocalizacion=" + id.ToString(), conex);

                da.Fill(bdvirtual, "objetolocalizacion");

                return bdvirtual.Tables["objetolocalizacion"];
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }
        
        //Devuelve todas las localizaciones de la base de datos
        public DataTable obtenerLocalizaciones()
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from localizacion", conex);

                da.Fill(bdvirtual, "localizacion");

                return bdvirtual.Tables["localizacion"];
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Modifica una localizacion
        public void editarLocalizacion(int id, string nombre, string descripcion, string imagen, string fondo)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                int i = 0;

                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from localizacion", conex);

                da.Fill(bdvirtual, "localizacion");

                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["localizacion"];

                foreach (DataRow registro in tabla.Rows)
                {
                    if ((int)registro["idLocalizacion"] == id)
                    {
                        tabla.Rows[i][1] = nombre;
                        tabla.Rows[i][2] = descripcion;
                        tabla.Rows[i][3] = imagen;
                        tabla.Rows[i][4] = fondo;
                    }

                    i++;
                }

                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                da.Update(bdvirtual, "localizacion");
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Borra los enemigos asociados a una localizacion
        public void borrarEnemigosLocalizacion(int id)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtualenemigo = new DataSet();
                SqlDataAdapter daenemigo = new SqlDataAdapter("select * from enemigolocalizacion", conex);

                daenemigo.Fill(bdvirtualenemigo, "enemigolocalizacion");
                DataTable tablaenemigo = new DataTable();
                tablaenemigo = bdvirtualenemigo.Tables["enemigolocalizacion"];

                int i = 0;
                foreach (DataRow registro in tablaenemigo.Rows)
                {
                    if ((int)registro["idLocalizacion"] == id)
                    {
                        tablaenemigo.Rows[i].Delete();
                    }

                    i++;
                }
                SqlCommandBuilder cbuilderenemigos = new SqlCommandBuilder(daenemigo);
                daenemigo.Update(bdvirtualenemigo, "enemigolocalizacion");
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Borra los objetos asociados a una localizacion
        public void borrarObjetosLocalizacion(int id)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtualobjeto = new DataSet();
                SqlDataAdapter daobjeto = new SqlDataAdapter("select * from objetolocalizacion", conex);

                daobjeto.Fill(bdvirtualobjeto, "objetolocalizacion");
                DataTable tablaobjeto = new DataTable();
                tablaobjeto = bdvirtualobjeto.Tables["objetolocalizacion"];

                //Primero borramos los enemigos asociados
                int i = 0;
                foreach (DataRow registro in tablaobjeto.Rows)
                {
                    if ((int)registro["idLocalizacion"] == id)
                    {
                        tablaobjeto.Rows[i].Delete();
                    }

                    i++;
                }
                SqlCommandBuilder cbuilderobjetos = new SqlCommandBuilder(daobjeto);
                daobjeto.Update(bdvirtualobjeto, "objetolocalizacion");
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Borra una localizacion
        public void borrarLocalizacion(int id)
        {

            int i = 0;
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from localizacion ", conex);

                da.Fill(bdvirtual, "localizacion");
                //Obtenemos la tabla localizacion
                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["localizacion"];

                foreach (DataRow registro in tabla.Rows)
                {
                    if ((int)registro["idLocalizacion"] == id)
                    {
                        tabla.Rows[i].Delete();
                    }
                    i++;
                }

                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                da.Update(bdvirtual, "localizacion");
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Obtiene el nombre de la localizacion con el ID que se pasa como argumento
        public string obtenerNombreLocalizacion(int id)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select nombreLocalizacion from localizacion where idLocalizacion=" + id, conex);

                da.Fill(bdvirtual, "localizacion");

                return bdvirtual.Tables["localizacion"].Rows[0][0].ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        public SqlDataReader obtenerLocalizacionId(int idLocalizacion)
        {
            try
            {
                string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
                SqlConnection conex = new SqlConnection(cadenaConexion);

                conex.Open();

                // creamos la query y la ejecutamos
                SqlCommand comando = new SqlCommand("SELECT * FROM [Localizacion] WHERE [Localizacion].[idLocalizacion]=" + idLocalizacion, conex);
                SqlDataReader dr = comando.ExecuteReader();
                return dr;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //conexion.Close();
            }
        }

        //Busca localizaciones por nombre o descripcion
        public DataTable obtenerLocalizacionNombre(string nombre, string nom_des)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = null;
                if (nom_des == "nombre")
                {
                    da = new SqlDataAdapter("select * from localizacion where nombreLocalizacion LIKE '%" + nombre + "%'", conex);
                }
                else if (nom_des == "descripcion")
                {
                    da = new SqlDataAdapter("select * from localizacion where descripcionLocalizacion LIKE '%" + nombre + "%'", conex);
                }
                da.Fill(bdvirtual, "localizacion");
                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["localizacion"];

                return tabla;
            }
            catch
            {
                DataTable tablavacia = new DataTable();
                return tablavacia;
            }
            finally
            {
                conex.Close();
            }
        }
    }
}
